home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / msdos / raytrace / pov / gen / ctds230 / ctds230.doc < prev    next >
Encoding:
Text File  |  1993-07-11  |  26.9 KB  |  694 lines

  1.                            Connect The Dots Smoother
  2.  
  3.                                     [CTDS]
  4.  
  5.                                  version 2.30
  6.  
  7.                         Copyright (c) 1991, 1992, 1993
  8.  
  9.                                  Truman Brown
  10.  
  11.                              All Rights Reserved
  12.  
  13.                                 July 12, 1993
  14.  
  15.  
  16.  
  17. ---
  18. COPYRIGHT STATEMENT:
  19. ---
  20. Connect The Dots Smoother (CTDS) is freely distributable.  There is no charge
  21. nor registration fee associated with its use.
  22.  
  23. The author retains the copyright to the program, but authorizes free
  24. distribution by electron bulletin boards (BBS'es), networks, magnetic media,
  25. etc.  If necessary, the distributor may charge no more than five dollars ($5)
  26. U.S. for distribution of this program.
  27.  
  28. CTDS may NOT be used as part of any commercial software or hardware package
  29. without the explicit consent of the author.  Interested parties may contact
  30. the author via CompuServe ID [71477,221].
  31.  
  32. The author makes no guarantees or warranties with this program and claims no
  33. responsibility for any damages or losses incurred through use of this program.
  34.  
  35.  
  36. ---
  37. INTRODUCTION:
  38. ---
  39. Connect The Dots Smoother (CTDS) is a data file generator currently supporting
  40. the following raytracer formats:
  41.  
  42. .  Persistence of Vision Raytracer (POV-Ray) - by various contributors
  43. .  Vivid Raytracer                           - by Stephen Coy
  44. .  PolyRay Raytracer                         - by Alexander Enzmann
  45.  
  46. For information about any of these raytracers, or about the art of raytracing,
  47. or the current state of computer graphics or computer art in general please
  48. visit the Graphics Developers forum on CompuServe (tm) (GO GRAPHDEV).
  49.  
  50. For those who are familiar with the art of raytracing, you know that computer
  51. generated raytraced images are created by combining and arranging basic
  52. primitives such as spheres, cylinders, boxes, etc.  Often, scenes will call for
  53. complex arrangements of primitives and it would be desirable for the connections
  54. between them to appear smooth and seamless.  Accomplishing this is quite often
  55. difficult and/or memory-intensive.  The artist may resort to the use of
  56. spline-based polygons generated by various modeling programs, or to the
  57. "packing" of primitives until the desired smoothness is achieved.
  58.  
  59. Though effective, these may or may not be the best methods.
  60.  
  61. CTDS provides another alternative.  It does what it's name implies, working like
  62. a rock-steady hand of a child connecting "dots" in three dimensional space.
  63. Given a series of 3d dot coordinates, CTDS will compute the appropriate
  64. clippings or intersections, scalings, rotations, and translations of cylinders,
  65. truncated elliptic cones, or the simple cones required to "connect the dots".
  66.  
  67. The author's original intent for this program was to aid in the creation of
  68. smooth spiral objects that could not easily be created manually using
  69. Constructive Solid Geometry.  While CTDS can simply be used to create smooth
  70. links between spheres in space (such as a spiral), people have found CTDS useful
  71. for creating everything from human heads to outer space vehicles.
  72.  
  73. Enjoy.
  74.  
  75.  
  76. ---
  77. CREATING A CTDS INPUT FILE:
  78. ---
  79. Using your favorite text editor or other CTDS-compatible modeling utility (such
  80. as SPIRAL or WORM), create an ASCII text file which contains numeric information
  81. describing the position and size of the spheres you desire to be connected.  The
  82. format should appear as follows:
  83.  
  84. [;] X-value Y-value Z-value R-value
  85.  │   │       │       │       │
  86.  └> signifies a comment line
  87.      └> defines X coordinate of the dot
  88.              └> defines Y coordinate of the dot
  89.                      └> defines Z coordinate of the dot
  90.                              └> defines radius of the dot
  91.  
  92. Example:
  93. ;This is a comment line:
  94. ;X    Y    Z    R
  95.  1.0  1.0 -3.0  1.34
  96.  2.0  2.0  3.0  1.34
  97.  3.3  1.0  4.5  2.44
  98.  
  99. Pretty simple, dontcha think?
  100.  
  101. As of version 2.3, variables and/or simple equations may be used in place of
  102. numeric values.
  103.  
  104. Example:
  105.    ;This is a comment line:
  106.    X = 1
  107.    Y = 2
  108.    Z = 3
  109.    R = .5
  110.    C = 10
  111.  
  112.    X, Y, Z, R                       ;This is also a comment
  113.    (X+C), (Y+C), (Z+C), R * C / 2
  114.    10, Y, Z%4, R
  115.  
  116. Important points to keep in mind:
  117. .  The entire XYZ and Radius values for a sphere must appear on a single line
  118. .  Only one set of XYZ and Radius values may appear on a single line.
  119. .  The file you create must contain at least TWO lines of coordinates.
  120. .  The maximum length of a line is 80 characters.
  121. .  There may be no sequential duplications, meaning no line may repeat the
  122.    coordinates of the prior line (unless the /m parameter is selected - more
  123.    about that later).
  124.    This is a basic fact of existence: two objects cannot exist in the same space
  125.    at the same time, therefore it is impossible to connect them.
  126.    You will get errors.
  127.    And the universe will explode in a quantum meltdown.
  128. .  There are 26 variables available (A-Z).  Variables must be uppercase.
  129. .  Any line using variables or equations must separate the XYZ and radius
  130.    components with commas.
  131. .  Arithmetic functions supported include: +, -, *, /, %, ^, =, and parentheses.
  132. .  Minimal error-checking is performed on incoming data, so be watchful and
  133.    careful.
  134.  
  135. Once you have created a dot-definition file, executing CTDS will automatically
  136. create a PoVRAY-, Vivid-, or PolyRay-compatible data file which contains spheres
  137. placed at the coordinates which you defined, as well as connecting cylinders
  138. and/or elliptic cones which will fill in the blanks between the dots.
  139.  
  140.  
  141. ---
  142. RUNNING CTDS
  143. ---
  144.  
  145. USAGE: CTDS [various optional parameters]
  146.  
  147. The optional parameters are as follows:
  148.  
  149. /i[inputfile]
  150.    This is the name of the ASCII dot-definition file which you created.  If you
  151.    don't specify a filename, the program will search for a default input
  152.    filename called CTDS.CTD.
  153.  
  154. /o[outputfile]
  155.    This is the name of the (guess what?) output file.  If you don't specify a
  156.    filename, the program will create a default output file called CTDS.POV.
  157.  
  158. /v
  159.    If specifed, this value flags CTDS to generate Vivid output data.  The
  160.    default is POV-Ray output.
  161.  
  162. /pr | /pr1
  163.    If specifed, this value flags CTDS to generate PolyRay output data.
  164.    Output format is standard sphere-cone-sphere-cone sequence.
  165.  
  166. /pr2
  167.    If specifed, this value flags CTDS to generate PolyRay output data.
  168.    Output format is union of sphere-cone-sphere-cone sequence.
  169.  
  170. /#
  171.    If specified, this value controls the level of precision for the floating
  172.    point values spit out by the program.  If no value is specified, the default
  173.    is 6 decimal places (/6).
  174.  
  175. /m
  176.    If specified, this parameter flags CTDS to create "multiple autonomous mini-
  177.    objects or mini-composites".  This is described in detail later.
  178.  
  179. /c
  180.    If specified, this parameter flags CTDS to create a connector between the
  181.    first and the last spheres defined in the input file.  Simply put, this
  182.    closes the object.
  183.  
  184. /so
  185.    If specified, this parameter flags CTDS to only output the data required to
  186.    render the spheres.  In other words, no connectors are computed.
  187.  
  188. /co
  189.    This is the opposite of /so.
  190.    If specified, this parameter flags CTDS to only output the data required to
  191.    render the connectors.
  192.  
  193. /c1
  194.    If specified, this parameter flags CTDS to only output the data required to
  195.    render CYLINDRICAL connectors (connectors with equal radii on both ends).
  196.  
  197. /bo
  198.    If specified, this parameter flags CTDS to only output the bounding data
  199.    data for POV-Ray, or the object extents for PolyRay or Vivid.  Useful for
  200.    manually optimizing bounds.
  201.  
  202. /qt
  203.    If specified, this parameter flags CTDS work without sending output to the
  204.    screen.  Useful for other applications that want to call CTDS silently.
  205.  
  206. /sc
  207.    This parameter only applies to POV-Ray output:
  208.    If specified, this parameter flags CTDS to add a block of texture transforms
  209.    to the output so that you can scale the texture separately from the object or
  210.    composite itself.
  211.       Translations use declared variables
  212.          transx1 transx2
  213.          transy1 transy2
  214.          transz1 transz2
  215.       Scalers use declared variables
  216.          scalex1
  217.          scaley1
  218.          scalez1
  219.    Change the values of these to translate or scale a composite before the
  220.    texture is applied to it.  This is useful if you need to change the location
  221.    or size of a composite, but don't desire to have the texture translated or
  222.    scaled as well.
  223.  
  224. /n[objectname]
  225.    This parameter only applies to POV-Ray output:
  226.    This is the name of the object or composite that the program spits out.  If
  227.    no name is specified, the program will automatically name your object or
  228.    composite "YourThing".
  229.  
  230. /d
  231.    This parameter only applies to POV-Ray output:
  232.    If specified, this parameter flags CTDS to NOT include the CTDS declarations
  233.    required for defining the basic spheres and connectors.  You will still be
  234.    required to have these declarations someplace however (such as an included
  235.    file).
  236.  
  237. /t[texturename]
  238.    This parameter only applies to POV-Ray output:
  239.    This is the name of the texture that is globally applied to your object or
  240.    composite.  If no texturename is specified, the program will use a default
  241.    texture called CTDS_Texture.
  242.  
  243. /s
  244.    This parameter only applies to POV-Ray output:
  245.    If specified, this parameter flags CTDS to write dots as sphere primitives
  246.    instead of quadric spheres.  If you want to be able to scale your output
  247.    unevenly, do NOT use this parameter.  Note however that sphere primitives
  248.    render faster than quadric spheres.
  249.  
  250. /bs
  251.    This parameter only applies to POV-Ray output:
  252.    If specified, this parameter flags CTDS to use spheres or quadric spheres to
  253.    bound your objects/composites.  The default is bounding by boxes.
  254.  
  255. /f#
  256.    This parameter only applies to POV-Ray output:
  257.    If specified, this value enables you to specify a percentage value to "fudge"
  258.    the bounding of your objects/composites.  This value must be greater than or
  259.    equal to zero.  If no value is specified, the program bounds with no fudging
  260.    (in other words: /f0).
  261.  
  262. /b
  263.    This parameter only applies to POV-Ray output:
  264.    If specified, this parameter flags CTDS to add a summary of bounding data to
  265.    the end of each object or composite.  This commented bounding data provides
  266.    the maximum, minimum and center extents of the object or composite and can be
  267.    used for hand-optimization of the bounding of the object or composite.
  268.  
  269. Miscellaneous usage notes:
  270. .  All parameters are optional.
  271. .  Typing CTDS with any other parameter (i.e., /h, /?, ?, /gimmeinfo) will
  272.    display a summary of the usage syntax.
  273. .  Whitespace is permitted between parameters and tokens:
  274.    (i.e., CTDS /i myinfile /o myoutfile /n NameofObject).
  275. .  Parameter token symbols are optional.  In other words /b -b and b are all the
  276.    same.
  277.  
  278.  
  279. ---
  280. USING THE OUTPUT:
  281. ---
  282. Include or copy the CTDS-generated outfile into your own .pov, .v , or .pi file,
  283. run your raytracer against it, and enjoy your image!
  284.  
  285.  
  286. ---
  287. IMPORTANT POV-Ray NOTE:
  288. ---
  289. . CTDS generates either a single object or a composite of objects using the dot
  290.   coordinates you defined.  You should inspect the output file to determine
  291.   whether an object or a composite was created.
  292.  
  293. . As noted earlier, CTDS generates objects and composites.  When objects and/or
  294.   composites are defined, PoVRAY allows them to be bounded by simpler shapes
  295.   such as boxes or spheres.  This GREATLY reduces the amount of time required to
  296.   render an image, since bounding reduces the number of tests the raytracer must
  297.   make.  CTDS automatically bounds each object and/or composite with a box,
  298.   unless you select the /bs parameter in which case it will bound with either a
  299.   quadric dot or a sphere depending upon the status of the /s parameter.
  300.  
  301.  
  302. ---
  303. IMPORTANT PolyRay NOTE:
  304. ---
  305. . /PR and /PR1 are functionally the same.  They will generate output in the sequence
  306.   of sphere-connector-sphere-connector.
  307. . /PR2 will output data in the format of a single union with the same sequence
  308.   of sphere-connector-sphere-connector.
  309.  
  310.  
  311. ---
  312. IMPORTANT PolyRay and Vivid NOTE:
  313. ---
  314.  
  315. . Specifying any of the bounding parameters (/b /bs /bo) will cause CTDS to write
  316.   a summary of the scene extents at the end of the output file.
  317.  
  318.  
  319. ---
  320. IMPORTANT developers NOTE:
  321. ---
  322.  
  323. . If you want to call CTDS from your own application, you can specify the /qt flag.
  324.   This will force CTDS to run in a quiet mode, not sending any data to the screen.
  325.   Error messages *WILL* be echoed however.
  326.  
  327.  
  328. ---
  329. OK, SO WHAT'S THAT MULTIPLE AUTONOMOUS BLAH BLAH NONSENSE?
  330. ---
  331. The purpose of multiple autonomous mini-objects/composites is to allow you to
  332. create a single file that contains specifications for several sets of connected
  333. sequences.  If you are using POV-Ray, each separate sequence is individually
  334. bounded.  This is useful for creating non-sequentially linked objects such as
  335. letters.
  336.  
  337. When reading an input file, CTDS will recognize blank lines as separators of
  338. "mini-objects".  When CTDS reads a blank line, it interprets that as a flag to
  339. end the current sequence and start a new one.  For POV-Ray, whenever a blank
  340. line is encountered, CTDS closes the current object it is processing, bounds it,
  341. and begins a new one.
  342.  
  343. It is important to note that, depending upon the status of the "/m" parameter,
  344. CTDS responds to blank lines in one of two ways.  To understand the difference
  345. in processing, let's go through an example:
  346.  
  347. Suppose you created a dot definition file with the following coordinates:
  348.  
  349.    ; This is a sample definition file:
  350.    ; TinySpiral
  351.    ; ---------------------------
  352.    ; X      Y      Z      Radius
  353.    ; ---------------------------
  354.      2.00   0.00   0.00   0.50
  355.      1.46  -0.20  -1.06   0.45
  356.      0.50  -0.40  -1.54   0.40
  357.     -0.44  -0.60  -1.36   0.35
  358.     -1.00  -0.80  -0.72   0.30
  359.     -1.05  -1.00   0.00   0.25
  360.     -0.69  -1.20   0.50   0.20
  361.     -0.20  -1.40   0.63   0.15
  362.      0.14  -1.60   0.45   0.10
  363.      0.23  -1.80   0.17   0.05
  364.      0.10  -2.00  -0.00   0.00
  365.  
  366. When the values are read by CTDS, they will be interpreted as a single object.
  367. In this particular case CTDS will create one (1) object composed of eleven dots
  368. and ten connectors.
  369.  
  370. However, if blank lines are stategically placed between the sphere definitions,
  371. CTDS will interpret the list of values as a collection of smaller objects which
  372. will be used as the building blocks of a final composite.  Each one of these
  373. smaller "mini-objects" can describe a unique "dot trail".  Each "dot trail",
  374. however, will begin where the previous one ended.
  375.  
  376.     ; This is a sample definition file:
  377.     ; TinySpiral
  378.     ; ---------------------------
  379.     ; X      Y      Z      Radius
  380.     ; ---------------------------
  381.       2.00   0.00   0.00   0.50 \
  382.       1.46  -0.20  -1.06   0.45  \
  383.       0.50  -0.40  -1.54   0.40   - mini-object
  384.      -0.44  -0.60  -1.36   0.35  /
  385.      -1.00  -0.80  -0.72   0.30 /
  386.  
  387.      -1.05  -1.00   0.00   0.25 \
  388.      -0.69  -1.20   0.50   0.20  \
  389.      -0.20  -1.40   0.63   0.15   - mini-object
  390.       0.14  -1.60   0.45   0.10  /
  391.       0.23  -1.80   0.17   0.05 /
  392.  
  393.       0.10  -2.00   0.00   0.00   - mini-object
  394.  
  395. In this case CTDS will create three mini-objects -
  396. one for the first block of coordinates
  397.    [2.00, 0.00, 0.00, 0.50] through [-1.00, -0.80, -0.72, 0.30],
  398. one for the second block of coordinate
  399.    [-1.05, -1.0, 0.00, 0.25] through [0.23, -1.80, 0.17, 0.05],
  400. and one for the last set of coordinates
  401.    [0.10, -2.00, 0.00, 0.00].
  402.  
  403. Thus each mini-object fits into the whole, much like a piece in a jigsaw puzzle.
  404.  
  405. You can probably get a clearer understanding if you visualize the sequence in
  406. which CTDS builds each mini-object and then the whole composite.  When the "/m"
  407. parameter is not specified, as in the previous example, CTDS will process the
  408. dot definitions within each block in the sequence of:
  409.    DOT-CONNECTOR-DOT           (1st mini-object) ...
  410.    CONNECTOR-DOT-CONNECTOR-DOT (subsequent mini-objects) ...
  411.  
  412. When the "/m" parameter is selected however, each grouping of dot definitions is
  413. treated like a separate puzzle instead of another piece of the main puzzle.
  414. These groupings are the multiple autonomous mini-objects.
  415.  
  416. CTDS will process the dot definitions within each block in the sequence of:
  417.    DOT-CONNECTOR-DOT           (all mini-objects) ...
  418. such that each mini-object begins with the first dot definition for that
  419. particular block and ends with the last dot definition of that particular block.
  420. This allows you to specify different starting and ending points for each block
  421. of definitions; thus these mini-objects are referred to as "autonomous".
  422.  
  423. While these autonomous mini-objects will still be utilized for building the
  424. final composite, they provide a different flexibility for defining the item you
  425. wish to create.
  426.  
  427. The two primary benefits of this are:
  428. . you now can create multiple mini-objects that fall under a single composite
  429.   and a single, easily accessed texture statement; and
  430. . multiple "dot trails" can be defined emanating from a common coordinate.
  431.  
  432. The one drawback of this is that since each mini-object is supposed to be
  433. autonomous, it will always begin with a dot.  Thus, if you use the "/m"
  434. parameter to perform branching, where each "dot trail" emanates from a common
  435. coordinate, the initial dot of each branch will be overloaded (duplicated),
  436. requiring manual editing of the generated data file to remove that initial dot
  437. from the branches (if you feel so inclined of course).
  438.  
  439. A final point to note is that the "/c" parameter will always connect only the
  440. first dot definition of the infile and the last dot definition. It will NOT
  441. connect the beginnings and endings of autonomous mini-objects.
  442.  
  443. If the use of "/m" is is still unclear, just play around with it and see what
  444. happens (what a cop out, huh?).
  445.  
  446.  
  447. ---
  448. MISCELLANEOUS STUFF:
  449. ---
  450. . For POV-Ray output, the bounding boxes, spheres, or quadric spheres generated
  451.   by CTDS should enhance the speed of rendering your complex images.  A default
  452.   "fudge factor" of 0 percent is built into the bound limits.  Depending upon
  453.   the irregularities of the shape you are trying to create, this may or may not
  454.   be enough.  You may notice large portions of your object are missing where the
  455.   bounds fail.  As explained earlier, CTDS can append a summary of statistics
  456.   about each mini-object and composite so that you can manually
  457.   optimize/customize the bounding shape as you see fit.  Additionally, the
  458.   command line parameter "/f#" allows you to specify a different percentage for
  459.   the fudge factor (i.e., /f20 for a 20 percent fudge factor).
  460.  
  461. . While CTDS will do its best to smooth out the spacing between dots, a low
  462.   density of spheres will still create a somewhat "bumpy" image.  This is a fact
  463.   of life: if you want better quality you have to pay for it.  In this case, the
  464.   costs are increased dot density and increased CPU time.  Keep in mind that
  465.   there is basically a one-to-one relationship between the number of dots and
  466.   the number of connectors generated.
  467.  
  468. . It is important to note that all of the same rules of spacing apply for variables
  469.   and expressions as they do for normal data.
  470.   If you want to assign some variables, it's best to do it at the beginning of the
  471.   file.  You should then clump any further assignments with a group of
  472.   coordinates and not leave it sequestered by itself.  If this doesn't sound clear
  473.   heres an example:
  474.  
  475.   ; Do this:
  476.     A = 5
  477.     B = A + 1
  478.     C = B + 1
  479.  
  480.     A,   B, C, 10
  481.     A+2, B, C, 10
  482.  
  483.     A = A * 2     ;--\
  484.     A,   B, C, 10 ;   - clump
  485.     A+5, B, C, 10 ;--/
  486.  
  487.   ; Don't do this:
  488.     A = 5
  489.     B = A + 1
  490.     C = B + 1
  491.  
  492.     A,   B, C, 10
  493.     A+2, B, C, 10
  494.                   ;--\
  495.     A = A * 2     ;   - these extra spaces may confuse CTDS
  496.                   ;--/
  497.     A,   B, C, 10
  498.     A+5, B, C, 10
  499.  
  500.  
  501. . A final point to note is that when attempting to create smooth curves, the
  502.   (external) side of the curve farthest from the radius will appear smoother
  503.   than the (internal) side closest to the radius.  This is because the
  504.   connectors (cylinders and cones) are basically straightedges and will
  505.   intersect at sharp angles when they meet.  In the case of curves, they meet on
  506.   the internal side of the curve and do not meet at all on the external side.
  507.   If the sharp angles bother you, increase the density of the dots.
  508.  
  509.  
  510. ---
  511. CONTENTS:
  512. ---
  513. Files included in the package:
  514.    CTDS230.EXE         The program
  515.    CTDS230.DOC         The documentation
  516.    WHATS.NEW           Changes/additions for new version
  517.    CTDS.CTD            Sample CTDS input file
  518.    POVRAY.CTD          Sample CTDS input file
  519.    VIVID.CTD           Sample CTDS input file
  520.    POLYRAY.CTD         Sample CTDS input file
  521.  
  522.  
  523. ---
  524. HISTORY: (the life of a small program)
  525. ---
  526. 07/11/93: CTDS v2.3
  527. . Weakened the integrity parser for the input files.  There was a bug in it
  528.   someplace, but it was just too much hassle to fix.  So what does that
  529.   mean?  CTDS now only checks to see if there are valid numbers in the input
  530.   file; double sequencing, extraneous data, and stuff like that are totally
  531.   ignored -- so if there are any errors in the input file, its up to YOU to
  532.   find them.
  533. . Cleaned up various output functions that were kinda messy.
  534. . CTDS can now read numbers in the ###e## format.
  535. . Replaced the "# dots connected" display with a whirly-thingy.
  536. . Added a recursive descent parser, so now variables and equations can be
  537.   used in the input file.  Variables available: uppercase A-Z.  Arithmetic
  538.   functions supported: addition, subtraction, multiplication, division,
  539.   modulo, and exponents.  Parentheses are also supported.
  540.  
  541. 01/22/93: CTDS v2.2
  542. . Changed /x to /pr[#] for PolyRay output
  543. . Added /bo to output bounds only. Writes object extents for PolyRay and Vivid.
  544. . Rewrote main processing function of program for easier maintenance.
  545. . Changed default bounding primitive from spheres to boxes.
  546. . Added /bs parameter to allow bounding by spheres.
  547. . Rewrote commandline parser for easier maintenance
  548. . Changed /t parameter (connectors only) to /co
  549. . Changed /p parameter (spheres only) to /so
  550. . Added /t option for a named texture
  551. . Shuffled various functions around, deleted a few, optimized a few
  552. . Fixed a big bounding bug.  Minimum values for bounding weren't working right.
  553.   Now they are.
  554. . Minor rewrite of documentation.
  555.  
  556. 12/20/92: CTDS v2.0c Macintosh port [Eduard Schwan]
  557. . Changed YourTexture to CTDS_Texture
  558. . Changed YourTransform to CTDS_Transform
  559.  
  560. ??/??/92: CTDS v2.0d
  561. . Fixed bug in declaration of roughness for POV-Ray declarations.
  562.   Mixed up stuff, can't remember when this was done.
  563.  
  564. 05/09/92: CTDS v2.0c
  565. . Added /SC parameter to perform scaling of composite prior to application of
  566.   texture.
  567. . Translations use declared variables transx1 transx2
  568.                                       transy1 transy2
  569.                                       transz1 transz2
  570.   Scalers use declared variables      scalex1
  571.                                       scaley1
  572.                                       scalez1
  573.  
  574. 05/02/92: CTDS v2.0b
  575. . Fixed a major bug that nobody ever complained about - dot sequences flowing
  576.   from small dot to large dot were not being connected properly
  577.  
  578. 04/12/92: CTDS v2.0
  579. Major code rewrite:
  580. . cleaned up source logic; cleared out a lot extraneous nonsense
  581. . removed DKB Raytracer output option -- outdated
  582. . fixed bug in generating null composites
  583. . added /b parameter; made bounding stats optional
  584. . added /c1 parameter; force usage of cylindrical connector only
  585. . changed default fudge factor to 0 percent instead of 10
  586. . changed default filenames to CTDS.CTD and CTDS.POV
  587. . Jumped to v2.0 just for the hell of it.
  588. . Removed some examples from documentation; was too confusing.
  589. . Resubmitted source to PoV-team for inclusion in PoV 1.0 utilities.
  590.  
  591. 04/12/92: CTDS v2.0a[ddon]
  592. . PolyRay output added by Alexander Enzmann.
  593.  
  594. 02/15/92: CTDS v1.17a
  595. . Cleaned up spheres-only output.
  596.   Not publicly released.
  597.  
  598. 01/21/92: CTDS v1.17
  599. . Made PoV 1.0 syntax-compliant.
  600. . Submitted source to PoV-team for inclusion in PoV 1.0 utilities.
  601.  
  602. 01/16/92: CTDS v1.16
  603. . Added Vivid support.
  604. . Added option to generate connectors only.
  605. . Made command line more flexible (major rewrite of parser).
  606. . Changed default filenames to VALS.COR and SMOOTH.INC.
  607. . Minor bug fix in /c parameter.
  608.  
  609. 12/22/91: CTDS v1.15
  610. . Removed option to choose whether to use CLIPPED_BYs or INTERSECTIONS.
  611. . Added option to generate spheres only.
  612.   Not publicly released.
  613.  
  614. 11/15/91: CTDS v1.14
  615. . Added option to choose whether to use CLIPPED_BYs or INTERSECTIONS.
  616.   Not publicly released.
  617.  
  618. 09/19/91: CTDS v1.13
  619. . Modified to default to POV-Ray compatibility.  Uses CLIPPED_BYs instead of
  620.   INTERSECTIONs for faster renderings.  DKB output still uses INTERSECTIONS.
  621.  
  622. . Added error message when /m and /c parameters are used together.
  623. . Revoked shareware constraint, now an official POV-Ray utility.
  624.  
  625. 08/24/91: CTDS v1.12
  626. . Added whitespace flexibility in commandline.
  627.   Not publicly released.
  628.  
  629. 07/30/91: CTDS v1.11
  630. . Minor bug fixes.
  631.   Not publicly released.
  632.  
  633. 06/30/91: CTDS v1.10
  634. . CTDS now generates mini-objects and a final composite instead of UNIONs.
  635. . CTDS automatically bounds the mini-objects and composite.
  636. . Added additional optional command line parameters:
  637.    - /m:  multiple autonomous mini-objects
  638.    - /d:  do NOT generate initial dot and connector declarations
  639.    - /s:  use spheres not quadricS
  640.    - /n:  user defined objectname
  641.    - /f#: fudge factor for bounds
  642. . Rewrite of documentation
  643.   Minor bug fixes.
  644.  
  645. 06/14/91: CTDS v1.10beta
  646.   Not publicly released.
  647.  
  648. 05/20/91: CTDS v1.00
  649. ! 1st Official release
  650.  
  651. 05/01/91: CTDS b0.90
  652. . Added command line option for user-specified input and output files.
  653.  
  654. 04/14/91: CTDS b0.70a
  655. . Algorithm modified to work with DKB 2.10.
  656. . Corrected error in Z axis rotation that resulted in "divide by zero" error.
  657.  
  658. 04/01/91: CTDS b0.70
  659. . Tangent compensations implemented.
  660. . All axis rotations fully functioning.
  661. . SPIRAL (c) value generator written to test results.
  662.  
  663. 03/25/91: CTDS b0.60
  664. . SMOOTHER renamed to CTDS.
  665. . Full screen interface replaced by command line implementation.
  666. . DKB rotations recognized as reversed from documentation.
  667. . Tangent compensation algorithm developed with assistance from Jim Castro.
  668.  
  669. 03/02/91: SMOOTHER b0.50
  670. . Hard disk crash!  No backups.  Preliminary test versions lost.
  671.  
  672. 01/15/91: SMOOTHER b?.??
  673. . The idea is born.  Math research begun.
  674.  
  675.  
  676. ---
  677. CREDITS:
  678. ---
  679. I wish to thank:
  680.  
  681. My wife Madrid for her patience and love.  Obsessed programmers / trace-aholics
  682. can be miserable to live with.
  683.  
  684. My kids Jamaica, Martinique, and Savannah for letting Daddy hog the PC.
  685.  
  686. Jim Castro, Math Specialist of California State University, Northridge for his
  687. assistance with the basic geometric algorithm.
  688.  
  689. Alexander Enzman for implementing PolyRay support.
  690.  
  691. Eduard Schwan and Jim Nitchals for porting CTDS to the Macintosh.
  692.  
  693. Heinz Schuller for beta testing Vivid output.
  694.